"""
__author__ = '霍格沃兹测试开发学社'
__desc__ = '更多测试开发技术探讨，请访问：https://ceshiren.com/t/topic/15860'
"""

'''
作业：
实现学生管理系统：

学生信息包含：
    - 编号（sid), 姓名（name), 年龄（age), 性别（gender) 四个信息
    - 每个学生信息使用字典形式保存
    - 使用列表保存所有学生的信息 

1. 实现菜单函数，输出下列信息，返回用户输入的编号，并进行输入校验。

    print("****************************************")
    print("*				学生管理系统			 *")
    print("*  	    1. 添加新学生信息              *")
    print("* 	    2. 通过学号修改学生信息		 *")
    print("*		3. 通过学号删除学生信息		 *")
    print("*		4. 通过姓名删除学生信息		 *")
    print("* 	    5. 通过学号查询学生信息          *")
    print("*		6. 通过姓名查询学生信息          *")
    print("*		7. 显示所有学生信息             *")
    print("*		8. 退出系统			  		 *")
    print("****************************************")
    select_op = input("输入编号选择操作：")

2. 实现控制函数，用来控制菜单的输出与功能的选择，直到用户选择8，结束程序运行。
3. 实现添加学生函数，函数参数为编号，姓名，年龄，性别四个参数，返回是否添加成功的结果，要求编号不可重复。
4. 实现修改函数，参数为学号，如果学生存在，则进行修改，不存在输出提示，并返回是否修改成功
5. 实现删除函数，参数为学号，如果学生存在，则进行删除，不存在输出提示，并返回是否删除成功
6. 实现删除函数，参数为姓名，如果学生存在，则进行删除（同名学生全部删除），不存在输出提示，并返回是否删除成功
7. 实现查询函数，参数为学号，如果学生存在，则输出学生信息，不存在输出提示，并返回是否查询成功
8. 实现查询函数，参数为姓名，如果学生存在，则输出学生信息（同名学生全部输出），不存在输出提示，并返回是否删除成功
9. 实现函数，输出所有学生信息
'''


class Student:
    def __init__(self, id: int, name: str, age: int, gender: str):
        self.id = id
        self.name = name
        self.age = age
        self.gender = gender


class StudentManage:

    def __init__(self):
        self.stu_list = []

    def menu(self):
        print("****************************************")
        print("*				学生管理系统			 *")
        print("*  	    1. 添加新学生信息              *")
        print("* 	    2. 通过学号修改学生信息		 *")
        print("*		3. 通过学号删除学生信息		 *")
        print("*		4. 通过姓名删除学生信息		 *")
        print("* 	    5. 通过学号查询学生信息          *")
        print("*		6. 通过姓名查询学生信息          *")
        print("*		7. 显示所有学生信息             *")
        print("*		8. 退出系统			  		 *")
        print("****************************************")

    def add_stu(self, id, name, age, gender):
        my_student = Student(id, name, age, gender)
        stu_info = {"id": my_student.id,
                    "name": my_student.name,
                    "age": my_student.age,
                    "gender": my_student.gender
                    }
        id_list = []
        for stu in self.stu_list:
            id_list.append(stu["id"])
        if id not in id_list:
            self.stu_list.append(stu_info)
            print(f"{name}同学添加成功")
        else:
            print("id重复无法添加")

    # 通过id修改学生
    def modify_stu_by_id(self, id, name, age, gender):
        my_student = Student(id, name, age, gender)
        stu_info = {"id": my_student.id,
                    "name": my_student.name,
                    "age": my_student.age,
                    "gender": my_student.gender
                    }
        if not self.stu_list:
            print("空学生列表")
            pass
        else:
            id_list = []
            for stu in self.stu_list:
                id_list.append(stu["id"])
            if id not in id_list:
                print(f"id为{id}的学生不存在，无法修改")
            else:
                for s in range(len(self.stu_list)):
                    if id == self.stu_list[s]["id"]:
                        self.stu_list[s] = stu_info
                        print(f"{name}同学修改成功")
                        break

    # 3通过ID删除学生
    def delete_stu_by_id(self, id):
        if not self.stu_list:
            print("空学生列表")
            pass
        id_list = []
        for stu in self.stu_list:
            id_list.append(stu["id"])
        if id not in id_list:
            print(f"id为{id}的学生不存在或已删除")
        else:
            for stu in self.stu_list:
                if stu["id"] == id:
                    self.stu_list.remove(stu)
                    print("删除成功")
                    break

    # 4.通过姓名删除学生信息
    def delete_stu_by_name(self, name):
        if not self.stu_list:
            print("空学生列表")
            pass
        name_list = []
        for stu in self.stu_list:
            name_list.append(stu["name"])
        if name not in name_list:
            print("该学生不存在")
        else:
            for s in range(len(self.stu_list)):
                for stu in self.stu_list:
                    if name == stu["name"]:
                        self.stu_list.remove(stu)
                        print(f"{name}同学删除成功")
                        break

    # 5.通过学号查询学生信息
    def query_stu_by_id(self, id):
        if not self.stu_list:
            print("空学生列表")
            pass
        elif self.stu_list:
            id_list = []
            for stu in self.stu_list:
                id_list.append(stu["id"])
            if id not in id_list:
                print(f"id为{id}的学生不存在或已删除")
            for stu in self.stu_list:
                if id == stu["id"]:
                    print(stu)
                    break

    # 6.通过姓名查看学生信息
    def query_stu_by_name(self, name):
        if not self.stu_list:
            print("空学生列表")
            pass
        name_list = []
        for stu in self.stu_list:
            name_list.append(stu["name"])
        if name not in name_list:
            print("该学生不存在")
        else:
            for stu in self.stu_list:
                if name == stu["name"]:
                    print(stu, end=" | ")

    # 7.显示所有学生信息
    def query_stu_all_name(self):
        if not self.stu_list:
            print("空学生列表")
            pass
        else:
            print(self.stu_list)



if __name__ == '__main__':
    my_stu_info = StudentManage()
    my_stu_info.menu()
    select_menu=input("请选择菜单")

    my_stu_info.add_stu(1, "Tom", 10, "女")
    my_stu_info.add_stu(2, "Timi", 20, "女")
    my_stu_info.add_stu(3, "Timi", 20, "女")
    my_stu_info.modify_stu_by_id(3,"Timi",25,"男")
    my_stu_info.query_stu_all_name()

